<?xml version="1.0" encoding="UTF-8"?>

<!-- 
 * Copyright 2008 Philippe Prados.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
-->

<?xml-stylesheet type="text/xsl" href="../../../../xslt/xslt-to-xhtml.xslt" ?>
<!-- jboss/jaas/default -->
<xsl:stylesheet
	version="2.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation=
		"http://www.w3.org/1999/XSL/Transform http://www.w3.org/2007/schema-for-xslt20.xsd
		 http://jndi-resources.googlecode.com/1.0/ http://www.prados.fr/xsd/1.0/jndi-resources.xsd
		"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:jndi="http://jndi-resources.googlecode.com/1.0/"
	xmlns:tools="http://jndi-resources.googlecode.com/1.0/java/com.googlecode.jndiresources.tools.XSLTools"
	exclude-result-prefixes="#all"
>
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes" encoding="utf-8" omit-xml-declaration="no"/>
<xsl:include href="../../install-drivers.xslt"/>
<xsl:variable name="lib"><xsl:value-of select="concat($targetdir,'jboss.server.conf/lib/')"/></xsl:variable>

<xsl:variable  name="basefilename"><xsl:value-of select="concat('deploy/',$currentid,'/',$currentid,'_mail-service')"/></xsl:variable>
<xsl:variable  name="filename"><xsl:value-of select="concat($targetdir,'jboss.server.conf/',$basefilename,'.jndi')"/></xsl:variable>

<xsl:template match="text()|comment()" />

<xsl:template match="jndi:resources[@id=$currentid]">
<xsl:value-of select="tools:fileCopy('../../../tools/xslt/save.xslt',concat($targetdir,'../xslt/'))"/>
<xsl:value-of select="tools:info(concat('Generate ',$filename))"/>
<xsl:result-document  href="{$filename}">
<xsl:text>&#xA;</xsl:text>
<xsl:comment>Generated by jndi-resources v<xsl:value-of select="$version"/></xsl:comment>
<xsl:text>&#xA;</xsl:text>
<xsl:processing-instruction name="jndi-stylesheet">href="xslt/save.xslt" target="<xsl:value-of select="concat($basefilename,'.xml')"/>"</xsl:processing-instruction>
<xsl:text>&#xA;</xsl:text>
<server>
	<xsl:apply-templates />
</server>
</xsl:result-document>
<xsl:call-template name="install-drivers"/>
</xsl:template>

<xsl:template match="jndi:resources[@id=$currentid]/jndi:resource[@familly=$familly]">

  <mbean code="com.googlecode.jndiresources.mbean.MailService"
         name="{$currentid}:service=Mail,jndiName={@name}">
    <attribute name="JNDIName">
    	<xsl:choose>
    		<xsl:when test="$use-java-context='true'">
				<xsl:value-of select="concat('java:${jndi-prefix}',@name)"/>
    		</xsl:when>
    		<xsl:otherwise>
				<xsl:value-of select="concat('${jndi-prefix}',@name)"/>
    		</xsl:otherwise>
    	</xsl:choose>
    </attribute>
	<xsl:call-template name="attribute">
		<xsl:with-param name="param">user</xsl:with-param>
		<xsl:with-param name="key">User</xsl:with-param>
	</xsl:call-template>
	<xsl:call-template name="attribute">
		<xsl:with-param name="param">password</xsl:with-param>
		<xsl:with-param name="key">Password</xsl:with-param>
	</xsl:call-template>
    <attribute name="Configuration">
      <!-- A test configuration -->
        <!-- Change to the user who will receive mail  -->
      <configuration>

        <!--  http://java.sun.com/products/javamail/javadocs/overview-summary.html#overview_description -->
        <!-- Change to your mail server prototocol -->
		<xsl:call-template name="property">
			<xsl:with-param name="param">store.protocol</xsl:with-param>
		</xsl:call-template>

		<xsl:call-template name="property">
			<xsl:with-param name="param">transport.protocol</xsl:with-param>
		</xsl:call-template>

		<xsl:call-template name="property">
			<xsl:with-param name="param">host</xsl:with-param>
		</xsl:call-template>

		<xsl:call-template name="property">
			<xsl:with-param name="param">from</xsl:with-param>
		</xsl:call-template>

		<xsl:call-template name="property">
			<xsl:with-param name="param">user</xsl:with-param>
		</xsl:call-template>

		<xsl:call-template name="property">
			<xsl:with-param name="param">debug</xsl:with-param>
		</xsl:call-template>

		<xsl:call-template name="protocol-property">
			<xsl:with-param name="param">user</xsl:with-param>
			<xsl:with-param name="tech">store</xsl:with-param>
		</xsl:call-template>

		<xsl:call-template name="protocol-property">
			<xsl:with-param name="param">host</xsl:with-param>
			<xsl:with-param name="tech">store</xsl:with-param>
		</xsl:call-template>

		<xsl:call-template name="protocol-property">
			<xsl:with-param name="param">port</xsl:with-param>
			<xsl:with-param name="tech">store</xsl:with-param>
		</xsl:call-template>

		<xsl:call-template name="protocol-property">
			<xsl:with-param name="param">connectiontimeout</xsl:with-param>
			<xsl:with-param name="tech">store</xsl:with-param>
		</xsl:call-template>

		<xsl:call-template name="protocol-property">
			<xsl:with-param name="param">timeout</xsl:with-param>
			<xsl:with-param name="tech">store</xsl:with-param>
		</xsl:call-template>


		<xsl:call-template name="protocol-property">
			<xsl:with-param name="param">user</xsl:with-param>
			<xsl:with-param name="tech">transport</xsl:with-param>
		</xsl:call-template>

		<xsl:call-template name="protocol-property">
			<xsl:with-param name="param">host</xsl:with-param>
			<xsl:with-param name="tech">transport</xsl:with-param>
		</xsl:call-template>

		<xsl:call-template name="protocol-property">
			<xsl:with-param name="param">port</xsl:with-param>
			<xsl:with-param name="tech">transport</xsl:with-param>
		</xsl:call-template>

		<xsl:call-template name="protocol-property">
			<xsl:with-param name="param">connectiontimeout</xsl:with-param>
			<xsl:with-param name="tech">transport</xsl:with-param>
		</xsl:call-template>

		<xsl:call-template name="protocol-property">
			<xsl:with-param name="param">timeout</xsl:with-param>
			<xsl:with-param name="tech">transport</xsl:with-param>
		</xsl:call-template>
        
		<xsl:for-each select="jndi:extends[@appsrv=$appsrv]/jndi:attribute">
		<property>
			<xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute>
			<xsl:attribute name="value"><xsl:value-of select="."/></xsl:attribute>
		</property>
		</xsl:for-each>
      </configuration>
    </attribute>
    <depends>jboss:service=Naming</depends>
  </mbean>

</xsl:template>

<xsl:template name="attribute">
<xsl:param name="param"/>
<xsl:param name="key"/>
	    <xsl:choose>
	    	<xsl:when test=".//jndi:property[@name=$param]">
	    		<attribute>
	    			<xsl:attribute name="name">
	    				<xsl:value-of select="$key"/>
	    			</xsl:attribute>
	    			<xsl:value-of select=".//jndi:property[@name=$param]/@value"/>
	    		</attribute>
	    	</xsl:when>
	    	<xsl:otherwise>
	    		<attribute>
	    			<xsl:attribute name="name">
	    				<xsl:value-of select="$key"/>
	    			</xsl:attribute>
	    			<xsl:value-of select="concat('${mail.',$param,'}')"/>
	    		</attribute>
	    	</xsl:otherwise>
	    </xsl:choose>
</xsl:template>

<xsl:template name="property">
<xsl:param name="param"/>
	    <xsl:choose>
	    	<xsl:when test=".//jndi:property[@name=$param]">
	    		<property>
	    			<xsl:attribute name="name">
	    				<xsl:value-of select="concat('mail.',$param)"/>
	    			</xsl:attribute>
		    		<xsl:attribute name="value">
		    			<xsl:value-of select=".//jndi:property[@name=$param]/@value"/>
		    		</xsl:attribute>
		    	</property>
	    	</xsl:when>
	    	<xsl:otherwise>
	    		<property>
	    			<xsl:attribute name="name">
	    				<xsl:value-of select="concat('mail.',$param)"/>
	    			</xsl:attribute>
	    			<xsl:attribute name="value">
	    				<xsl:value-of select="concat('${mail.',$param,'}')"/>
	    			</xsl:attribute>
	    		</property>
	    	</xsl:otherwise>
	    </xsl:choose>
</xsl:template>

<xsl:template name="protocol-property">
<xsl:param name="param"/>
<xsl:param name="tech"/>
	    <xsl:choose>
	    	<xsl:when test=".//jndi:property[@name=concat($tech,'.',$param)]">
	    		<property>
	    			<xsl:attribute name="name">
	    				<xsl:choose>
	    					<xsl:when test=".//jndi:property[@name=concat($tech,'.protocol')]">
	    						<xsl:value-of select="concat('mail.',.//jndi:property[@name=concat($tech,'.protocol')]/@value,'.',$param)"/>
	    					</xsl:when>
	    					<xsl:otherwise>
	    						<xsl:value-of select="concat('mail.${mail.',$tech,'.protocol}.',$param)"/>
	    					</xsl:otherwise>
	    				</xsl:choose>
	    			</xsl:attribute>
		    		<xsl:attribute name="value">
    					<xsl:value-of select=".//jndi:property[@name=concat($tech,'.',$param)]/@value"/>
		    		</xsl:attribute>
		    	</property>
	    	</xsl:when>
	    	<xsl:otherwise>
	    		<property>
	    			<xsl:attribute name="name">
	    				<xsl:choose>
	    					<xsl:when test=".//jndi:property[@name=concat($tech,'.protocol')]">
	    						<xsl:value-of select="concat('mail.',.//jndi:property[@name=concat($tech,'.protocol')]/@value,'.',$param)"/>
	    					</xsl:when>
	    					<xsl:otherwise>
	    						<xsl:value-of select="concat('mail.${mail.',$tech,'.protocol}.',$param)"/>
	    					</xsl:otherwise>
	    				</xsl:choose>
	    			</xsl:attribute>
	    			<xsl:attribute name="value">
	    				<xsl:value-of select="concat('${mail.',$tech,'.',$param,'}')"/>
	    			</xsl:attribute>
	    		</property>
	    	</xsl:otherwise>
	    </xsl:choose>
</xsl:template>

</xsl:stylesheet>

